#ifndef MYPTZ_H
#define MYPTZ_H

#include <iostream>

//Altre Librerie
#include "myhomography.h"

//Librerie Image Lab

#include "proclib_SourceManager.h"
#include "proclib_axis_controller.h"
#include <imglib_VideoOutput_JPGSequence.h>

#define GlobalTimeDelay 2000

class myPTZ : public QObject
{
    Q_OBJECT

private:


    CVideoOutput_JPG *_registratore;


    //VARIABILI
    CAxisCameraController *cameraController;
    CSourceManager *cameraManager;

    //Quest'oggetto contiene la vista della telecamera master e la vista della PTZ
    myHomography *homographyManager;




    CImageRGB _detectorView;

    vector<PTCorrespondanceIMG> _corrispondence;

    int _ZoomLevel;

    //VARIABILI PER IL MOVIMENTO A SPIRALE
    float _pan;
    float _tilt;
    int _pos;
    int _angulate;
    QTimer *_SpiralTimer;     //Timer per impostare ogni quanto cambiare direzione
    QTimer *_SpiralStopTimer; //Timer per fermare la scansione
    int _captureTime;
    //Timer per l'attesa del posizionamento
    QTimer *_PositionDelay;
    QTimer *_ReadPosDelay;
    bool _createHomographyXY;
    bool _SaveFrameHomoPT;
    bool _Home;
    bool _read;
private:
    void changeInizPosition();


public:

    //Costruttore
    myPTZ(CSourceManager *camera);

    //Inizializzazione
    bool Iniz(CImageRGB *frame, CStr HomePosition);

    bool canMove();

    void GoPreset(CStr Position);

    //Slot per muovere la telecamera in un punto
    bool movePoint(QPoint &movePoint,int Zoom);
    bool movePoint(float Pan, float Tilt, int Zoom);

    Mat getHXY();
    Mat getHPT();
    void stampaProva(int x, int y, int z);

private slots:
    void sl_ChangeDirection();
    void sl_SaveFrame();
    void sl_GoTrackPT();

public slots:

    //Cambia la vista della PTZ
    void sl_saveViewPTZ(CImageRGB *frame);

    //Cambia la vista del Detector
    void sl_changeSourceViewPTZ(CImageRGB *frame);

    //Slot per fermare il movimento a spirale
    void sl_stopSpirale();

    //Slot per avviare il movimento a spirale
    void sl_SpiralDetection(int angulate,int captureTime , int ScanTime);

    //Aggiorna l'omografia
    bool sl_updateHomography();

    //Gestore dei frame della PTZ
    void sl_frameManager(CImageRGB *frame);

    void sl_createHomographyXY();

    bool sl_createHomographyPT();

    void sl_ScanCorrispondecePT();

    bool movePointABS(float Pan, float Tilt, int Zoom);

    void sl_MoveTrackPT();



signals:
   // void sign_noMove(QPoint &movePoint);
   // void sign_createHomography();
    void sign_ChangeSpiralMove();
    void sign_Initial(CImageRGB* detectorView);
    void sign_ScanComplete();


};

#endif // MYPTZ_H
